public class Solution {
    //给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
    //请注意 ，必须在不复制数组的情况下原地对数组进行操作。
    //示例 1: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0]
    //示例 2: 输入: nums = [0] 输出: [0]
    public void moveZeroes(int[] nums) {
        int dest = -1;
        int cur = 0;
        while(cur < nums.length){
            while(cur < nums.length && nums[cur] == 0){
                cur++;
            }
            if(cur < nums.length){
                swap(nums, dest + 1, cur);
                dest++;
                cur++;
            }
        }
    }
    private void swap(int[] nums, int i, int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

    public void moveZeros(int[] nums){
        for(int cur = 0, dest = -1; cur < nums.length; cur++){
            if(nums[cur] != 0){
                int tmp = nums[cur];
                nums[cur] = nums[dest + 1];
                nums[dest + 1] = tmp;
                dest++;
            }
        }
    }
}
